type JSDynamicObject = any;
var t : boolean = true;
var f : boolean = false;
var s : string = "abc";
var n : number = 42;
var b : bigint = 42n;
let b1 : boolean = t ?? f;
console.log (typeof (t ?? f));
console.log (t ?? f);
let b2 : boolean = f ?? t;
console.log (typeof (f ?? t));
console.log (f ?? t);
let b3 : boolean | string = t ?? s;
console.log (typeof (t ?? s));
console.log (t ?? s);
let b4 : boolean | string = f ?? s;
console.log (typeof (f ?? s));
console.log (f ?? s);
let b5 : string | boolean = s ?? t;
console.log (typeof (s ?? t));
console.log (s ?? t);
let b6 : string | boolean = s ?? f;
console.log (typeof (s ?? f));
console.log (s ?? f);
let b7 : boolean | number = t ?? n;
console.log (typeof (t ?? n));
console.log (t ?? n);
let b8 : boolean | number = f ?? n;
console.log (typeof (f ?? n));
console.log (f ?? n);
let b9 : number | boolean = n ?? t;
console.log (typeof (n ?? t));
console.log (n ?? t);
let b10 : number | boolean = n ?? f;
console.log (typeof (n ?? f));
console.log (n ?? f);
let b11 : boolean | bigint = t ?? b;
console.log (typeof (t ?? b));
console.log (t ?? b);
let b12 : boolean | bigint = f ?? b;
console.log (typeof (f ?? b));
console.log (f ?? b);
let b13 : bigint | boolean = b ?? t;
console.log (typeof (b ?? t));
console.log (b ?? t);
let b14 : bigint | boolean = b ?? f;
console.log (typeof (b ?? f));
console.log (b ?? f);
let b15 : boolean | undefined = t ?? undefined;
console.log (typeof (t ?? undefined));
console.log (t ?? undefined);
let b16 : boolean | undefined = f ?? undefined;
console.log (typeof (f ?? undefined));
console.log (f ?? undefined);
let b17 : undefined | boolean = undefined ?? t;
console.log (typeof (undefined ?? t));
console.log (undefined ?? t);
let b18 : undefined | boolean = undefined ?? f;
console.log (typeof (undefined ?? f));
console.log (undefined ?? f);
let s1 : string = s ?? s;
console.log (typeof (s ?? s));
console.log (s ?? s);
let s2 : string | number = s ?? n;
console.log (typeof (s ?? n));
console.log (s ?? n);
let s3 : number | string = n ?? s;
console.log (typeof (n ?? s));
console.log (n ?? s);
let s4 : string | bigint = s ?? b;
console.log (typeof (s ?? b));
console.log (s ?? b);
let s5 : bigint | string = b ?? s;
console.log (typeof (b ?? s));
console.log (b ?? s);
let s6 : string | undefined = s ?? undefined;
console.log (typeof (s ?? undefined));
console.log (s ?? undefined);
let s7 : undefined | string = undefined ?? s;
console.log (typeof (undefined ?? s));
console.log (undefined ?? s);
let n1 : number = n ?? n;
console.log (typeof (n ?? n));
console.log (n ?? n);
let n2 : number | bigint = n ?? b;
console.log (typeof (n ?? b));
console.log (n ?? b);
let n3 : bigint | number = b ?? n;
console.log (typeof (b ?? n));
console.log (b ?? n);
let n4 : number | undefined = n ?? undefined;
console.log (typeof (n ?? undefined));
console.log (n ?? undefined);
let n5 : undefined | number = undefined ?? n;
console.log (typeof (undefined ?? n));
console.log (undefined ?? n);
var c : any = [1, "a"] ?? 123;
console.log (c);
var d : boolean | undefined = t ?? undefined;
console.log (d);
var objectx : JSDynamicObject = {};
var objecty : JSDynamicObject = {};
objectx.prop = t;
objecty.prop = 1.1;
var v1 : boolean = objectx.prop;
var v2 : number = objecty.prop;
var v : boolean | number = v1 ?? v2;
console.log (v);
